/**
 *
 */
package com.nightwalker.xsite.bean;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;

/**
 * ValidacoesBean
 * <br><br>
 * <b>Description:</b> Classe usada para validações de dados.
 * <br><br>
 * Created in Feb 8, 2008 3:47:57 PM
 * <br>
 * <b>version:</b>1.0
 * <br>
 * <b>Modifications:</b>
 */
public class ValidacoesBean extends Beans {
	public void validateNota(FacesContext context, UIComponent componentToValidate, Object value)
			throws ValidatorException {

		try {
			log.debug("Validando nota");
			float nota = Float.parseFloat((String) value);

			if (nota < 0f || nota > 100.00f) {
				log.debug("Nota com tamanho equivocado");
				FacesMessage message = new FacesMessage("A nota deve ser entre 0 e 100");
				throw new ValidatorException(message);
			}

		} catch (NumberFormatException e) {
			log.debug("Ocorreu o seguinte erro ao validar a nota: ", e);
			FacesMessage message = new FacesMessage("Nota em formato invalido");
			throw new ValidatorException(message);
		}
	}

	public void validateData(FacesContext context, UIComponent componentToValidate, Object value)
			throws ValidatorException {
		log.debug("validando data");
		SimpleDateFormat simpleDataFormat = new SimpleDateFormat("dd/MM/yyyy");
		try {
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(simpleDataFormat.parse((String) value));

			if (calendar.compareTo(Calendar.getInstance()) >= 1) {
				log.debug("Data no futuro detectada");
				FacesMessage message = new FacesMessage("A data se encontra no futuro");
				throw new ValidatorException(message);
			}

		} catch (ParseException e) {
			log.debug("Ocorreu o seguinte erro ao validar a data: ", e);
			FacesMessage message = new FacesMessage(
					"Data em formato invalido, formato correto: dd/MM/aaaa");
			throw new ValidatorException(message);
		}
	}

	public void validateDuracao(FacesContext context, UIComponent componentToValidate, Object value)
			throws ValidatorException {
		log.debug("validando duracao");
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss");
		try {
			simpleDateFormat.parse((String) value);
		} catch (ParseException e) {
			log.debug("Ocorreu o seguinte erro ao validar a duracao:", e);
			FacesMessage message = new FacesMessage(
					"Duracao em formato invalido, formato correto: mm:ss");
			throw new ValidatorException(message);
		}
	}

	public void validatePreco(FacesContext context, UIComponent componentToValidate, Object value)
			throws ValidatorException {
		log.debug("validando preco");

		try {
			float preco = Float.parseFloat((String) value);

			if (preco > 9999999.99f) {
				log.debug("Preco maior que 9999999.99f");
				FacesMessage message = new FacesMessage(
						"O preco nao pode ser maior do que 9999999.99");
				throw new ValidatorException(message);
			} else if (preco < 0) {
				FacesMessage message = new FacesMessage(
						"O preco nao pode ser negativo");
				throw new ValidatorException(message);
			}

		} catch (NumberFormatException e) {
			log.debug("Ocorreu o seguinte erro ao validar o preco: ", e);
			FacesMessage message = new FacesMessage(
					"Preco em formato invalido, formato correto: 9999999.99");
			throw new ValidatorException(message);
		}

	}
}
